#include <reg52.h>

sbit ADDR0 = P1 ^ 0; // 通过跳线器 把p1^0引脚和38译码器的ADDR0口连接起来  数据位
sbit ADDR1 = P1 ^ 1; // 通过跳线器 把p1^1引脚和38译码器的ADDR1口连接起来  数据位
sbit ADDR2 = P1 ^ 2; // 通过跳线器 把p1^2引脚和38译码器的ADDR2口连接起来  数据位
sbit ADDR3 = P1 ^ 3; // 通过跳线器 把p1^3引脚和38译码器的ADDR3口连接起来   使能ENLED=0，ADDR3=1 固定
sbit ENLED = P1 ^ 4; // 使能ENLED=0，ADDR3=1 固定

// 数码管真值表
unsigned char code LedChar[] = {
    0xC0, 0xF9, , 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0xBE}
void main()
{
    unsigned char cnt = 0;  
    unsigned char sec = 0;
//*********************38译码器 固定配置***********************************************
    ENLED = 0;   //使能开关 关闭
    ADDR3 = 1;
    ADDR2 = 0;
    ADDR1 = 0;
    ADDR0 = 0;   //38译码器 真值   0111 1111
//************************************************************************************
//*********************定时器***********************************************
    TMOD = 0x01;
    TH0 = 0xB8;
    TL0 = 0x00;
    TR0=1;

    while (1)
    {
        if (TF0 == 1)
        {
            TF0 = 0;
            TH0 = 0xB8;
            TL0 = 0x00;
            cnt++;
            if (cnt >= 50)
            {
                cnt = 0;
//********************************************************************
                P0 = LedChar[sec];
                sec++;  //真值表 循环迭代
                if (sec >= 16)
                {
                    sec = 0;
                }
            }
        }
    }
}